#ifndef __PROC_H_
#define __PROC_H_

#include <unistd.h>
#include <stdio.h>
#include <stdint.h>

void scheduler();
void newproc(char* fn, char* arg0, int arg_size);
void scheduler(void);

enum {
    UNUSED,
    RUNABLE,
    RUNING
};

// 协程的状态，包括函数的指针(pc)、运行中的sp指针、以及当前状态
typedef struct CoContext {
    char* sp;
    char* bp;
    char* pc;
    char* rbx;
    char* r12;
    char* r13;
    char* r14;
    char* r15;
} CoContext;

// coroutines
typedef struct Co {
    uint8_t status;
    CoContext context;
    struct Co* next;
    char* stack_base;
} Co;

// 保存调度器信息以及所有的协程
typedef struct Sched {
    Co* co_head;
    Co* co_tail;
    uint16_t co_count;
} Sched;

#endif